home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload Trio 2
/
Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO
/
dir43
/
med300.zip
/
MECORE.CLA
< prev
next >
Wrap
Text File
|
1994-02-22
|
5KB
|
133 lines
!▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
!█ █
!█ MECORE.CLA █
!█ Low-level edit buffer manipulation █
!█ █
!█ Revision Number: 1 █
!█ Revision Date : 22-Feb-94 █
!█ █
!█ Revision History █
!█ 1 Created █
!█ █
!▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
MEMBER('MEMOEDIT')
!────────────────────────────────────────────────────────────────────────
! Return character at specified buffer offset
!────────────────────────────────────────────────────────────────────────
ME_GetChar FUNCTION( usOffset )
! Return:
ubRetVal BYTE ! Character
! Locals:
ulAddress ULONG ! Address
CODE
IF NOT MED:usCharacters ! If buffer is empty
ubRetVal = 0 ! Return 0
ELSIF usOffset > (MED:usCharacters - 1) ! Else if past buffer end
ubRetVal = 0 ! Return 0
ELSE ! Else
ulAddress = MED:ulEditBuffer + usOffset ! Form address
PEEK(ulAddress, ubRetVal) ! Return character
. ! Endif
RETURN( ubRetVal )
!────────────────────────────────────────────────────────────────────────
! Overwrites character at specified buffer offset
!────────────────────────────────────────────────────────────────────────
ME_PutChar PROCEDURE( usOffset, ubChar )
! Locals:
ulAddress ULONG ! Address
CODE
IF NOT MED:usCharacters ! If buffer is empty
RETURN ! Return
ELSIF usOffset >= (MED:usCharacters - 1) ! Else if past end
ME_InsTxt(usOffset, 1, ubChar) ! Insert character
ELSE ! Else
ulAddress = MED:ulEditBuffer + usOffset ! Form address
POKE(ulAddress, ubChar) ! Overwrite character
. ! Endif
RETURN
!────────────────────────────────────────────────────────────────────────
! Return text block in specified buffer range
!────────────────────────────────────────────────────────────────────────
ME_GetBlock PROCEDURE( xDest, usOffset, usCount )
CODE
xDest = '' ! Clear destination
IF MED:usCharacters ! If buffer not empty
usOffset = ME_Min(usOffset, MED:usCharacters-1)
usCount = ME_Min(usCount, SIZE(xDest)) ! Get text
usCount = ME_Min(usCount, (MED:usCharacters-1) - usOffset)
CMemMove(ADDRESS(xDest), MED:ulEditBuffer + usOffset, usCount)
. ! Endif
RETURN
!────────────────────────────────────────────────────────────────────────
! Insert a string of text at the specified buffer offset
!────────────────────────────────────────────────────────────────────────
ME_InsTxt PROCEDURE( usOffset, usStrLen, sString )
! Locals:
usLine USHORT ! Line index
ulInsPos ULONG ! Insertion point
CODE
! Set offset and length
usOffset = ME_Min(usOffset, ME_Max(MED:usCharacters-1, 0))
usStrLen = ME_Min(usStrLen, MED:usMaxChars - MED:usCharacters)
MED:usCharacters += usStrLen ! Update character count
usLine = ME_LineIndex( usOffset ) ! Adjust line pointers
ME_AdjLines(usLine+1, usStrLen) !
! Adjust any marked block
IF (MED:isBlockBegin >= usOffset) THEN MED:isBlockBegin += usStrLen.
IF (MED:isBlockEnd >= usOffset) THEN MED:isBlockEnd += usStrLen.
ulInsPos = MED:ulEditBuffer + usOffset ! Insert text
CMemMove(ulInsPos + usStrLen, ulInsPos, MED:usCharacters - usOffset)
CMemMove(ulInsPos, ADDRESS(sString), usStrLen) !
RETURN
!────────────────────────────────────────────────────────────────────────
! Delete a string of text at the specified buffer offset
!────────────────────────────────────────────────────────────────────────
ME_DelTxt PROCEDURE( usOffset, usLength )
! Locals:
usLine USHORT ! Line index
ulDelPos ULONG ! Deletion point
CODE
IF NOT MED:usCharacters THEN RETURN. ! Return if buffer empty
! Set offset and length
usOffset = ME_Min(usOffset, MED:usCharacters-1)
usLength = ME_Min(usLength, (MED:usCharacters-1) - usOffset)
MED:usCharacters -= usLength ! Update character count
usLine = ME_LineIndex( usOffset ) ! Adjust line pointers
ME_AdjLines(usLine+1, -usLength) !
! Adjust any marked block
IF (MED:isBlockBegin >= usOffset+1) THEN MED:isBlockBegin -= usLength.
IF (MED:isBlockEnd >= usOffset+1) THEN MED:isBlockEnd -= usLength.
ulDelPos = MED:ulEditBuffer + usOffset ! Delete text
CMemMove(ulDelPos, ulDelPos + usLength, MED:usCharacters - usOffset)
CMemSet(MED:ulEditBuffer + MED:usCharacters, 20H, usLength)
RETURN !